/*
面试题 05.02. 二进制数转字符串
已解答
中等
相关标签
相关企业
提示
二进制数转字符串。给定一个介于0和1之间的实数（如0.72），类型为double，打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示，则打印“ERROR”。

示例1:

 输入：0.625
 输出："0.101"
示例2:

 输入：0.1
 输出："ERROR"
 提示：0.1无法被二进制准确表示
 

提示：

32位包括输出中的 "0." 这两位。
题目保证输入用例的小数位数最多只有 6 位
*/

#include <string>

using namespace std;

class Solution {
public:
    string printBin(double num) {
        // 0 是特殊情况
        if(num == 0)    return "0.0";
        string ans = "0.";
        int count = 0;
        // 计算直至32位精度或者变为0
        while(num > 0 && count < 32) {
            num *= 2;
            int integer = (int)num; // 整数
            ans += to_string(integer);
            num -= integer;
            // 完成整数部分，开始小数部分
            count++;
        }
        if(num > 0) {
            return "ERROR";
        }
        return ans;
    }
};